<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        let s1 = new Set([1, 7, 2, 3, 4, 5, 3, 3, 2, 1, 0])
        console.log(s1);//set容不下相同数据所以会去调相同的

        console.log([...s1]);//转换成数组

        console.log(Array.from(s1));//这个也是转换成数组

        // set实例属性与方法
        console.log('------------------add向添加set数据------------------------');
        let s2 = new Set();
        //    单个添加
        s2.add(1)
        s2.add(2)
        s2.add(3)
        //    多个添加
        s2.add(4).add(5).add(6)
        console.log(Array.from(s2));

        // set.size输出长度
        console.log(s2.size);

        console.log('--------------------has判断set里面有没有这个数-----------------------');

        console.log(s2.has(5));//有就是true 没有就是false

        console.log('------------------delete删除set数据------------------------');
        s2.delete(6)//删除6
        console.log(s2);
        console.log(s2.has(6));//判断set没有6就是false
        //  原始set也是有iterator接口的所以也可以用for...of
        for (let i of s2) {
            console.log(i);
        }


        //set 结构 键名其实就是键值
        console.log('-----keys()遍历返回键-----');
        let ss=new Set(["胡歌","彭于晏","我","韩立"])
        console.log(ss);
        for (let i of ss.keys()) {
            console.log(i);
        }

        console.log('-----values()遍历返回值-----');

        for (let i of ss.values()) {
            console.log(i);
        }
        //set 结构 键名其实就是键值
        console.log('------entries()遍历返回键值-----');
        for (let i of ss.entries()) {
            console.log(i);
        }


        let arr = ['胡歌', '彭于晏', '侯卿', '蚩梦']
        // 普通数组就会遍历键值
        for (const [index, itme] of arr.entries()) {
            console.log(index, itme);
        }

        // 因为set结构键值是一样的
        ss.forEach((itme, index) => {
            console.log(itme, index);
        });


        console.log('-----------------面试题---------------------------------');
        let arrs = [1, 2, 1, 2, '胡歌', '彭于晏', '胡歌', '彭于晏', { mame: '彭于晏' }, { name: '胡歌' }, { name: '胡歌' }, [12, 23], [12, 23]]
        // undefined ,NaN也能处理
        function sets(arr) {
            let res = new Set()
            return arr.filter((itme) => {
                console.log(itme);
                let id = JSON.stringify(itme)
                if (res.has(id)) {
                    return true
                } else {
                    res.add(id)
                    return false
                }
            })
        }
        console.log(sets(arrs));
    </script>
</body>

</html>